// 导入http-errors模块，用于创建HTTP错误
var createError = require('http-errors');
// 导入express模块，用于创建Web服务器
var express = require('express');
// 导入path模块，用于处理文件路径
var path = require('path');
// 导入cookie-parser模块，用于解析cookie
var cookieParser = require('cookie-parser');
// 导入morgan模块，用于日志记录
var logger = require('morgan');
// 导入cors模块，用于处理跨域请求
const cors = require('cors')
var q = require("./router")
    // 导入路由模块
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
// 创建express应用
var app = express();
// 设置视图引擎
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// 中间件配置
// 使用morgan进行日志记录
app.use(logger('dev'));
// 解析JSON格式的请求体
app.use(express.json());
// 解析URL编码的请求体
app.use(express.urlencoded({ extended: false }));
// 使用cookie-parser中间件解析cookie
app.use(cookieParser());
// 静态文件服务，提供public目录下的文件
app.use(express.static(path.join(__dirname, 'public')));
// 开启跨域资源共享CORS
app.use(cors())
    // 使用路由处理器
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/api', q)
// 404错误处理中间件
// catch 404 and forward to error handler
app.use(function(req, res, next) {
    next(createError(404));
});
// 错误处理中间件
// error handler
app.use(function(err, req, res, next) {
    // 设置本地变量，用于错误页面的显示
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};
    // 设置响应状态码
    // render the error page
    res.status(err.status || 500);
    // 渲染错误页面
    res.render('error');
});
// 导出应用实例
module.exports = app;